home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
snip0493.zip
/
FILCOUNT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-05
|
2KB
|
94 lines
/*
** FILCOUNT.C - counts directories and /or files in a directory
**
** public domain demo by Bob Stout
*/
#include <stdio.h>
#include <string.h>
#undef TRUE
#undef FALSE
typedef enum {ERROR = -1, FALSE, TRUE} LOGICAL;
#ifdef __ZTC__
#include <dos.h>
#elif defined(__TURBOC__)
#include <dir.h>
#include <dos.h>
#define _dos_findfirst(f,a,b) findfirst(f,b,a)
#define _dos_findnext(b) findnext(b)
#define find_t ffblk
#define _A_SUBDIR FA_DIREC
#define attrib ff_attrib
#define name ff_name
#else /* assume MSC/QC */
#include <dos.h>
#include <errno.h>
#endif
#undef SUCCESS
#define SUCCESS 0
#define LAST_CHAR(str) (str)[strlen(str) - 1]
unsigned DirCount = 0, FileCount = 0;
/*
** Arguments: 1 - directory to search
** 2 - search subdirectories: TRUE or FALSE
*/
void do_dir(char *path, int recurse_flag)
{
char search[67], new[67];
struct find_t ff;
strcpy(search, path);
if ('\\' != LAST_CHAR(search))
strcat(search, "\\");
strcat(search, "*.*");
if (SUCCESS == _dos_findfirst(search, 0xff, &ff)) do
{
if ('.' == *ff.name)
continue;
if (ff.attrib & _A_SUBDIR)
{
DirCount++;
if (recurse_flag)
{
strcpy(new, path);
if ('\\' != LAST_CHAR(new))
strcat(new, "\\");
strcat(new, ff.name);
do_dir(new, recurse_flag);
}
}
else FileCount++;
} while (SUCCESS == _dos_findnext(&ff));
}
/*
** Simple resursive file/directory counter
**
** Usage: FILCOUNT [path_name] [{Y | N}]
**
** Notes: 1. If a path name isn't specified, the current directory is assumed
** 2. Default recursion flag is FALSE
** 3. Path must be specified in order to specify the recursion flag
*/
void main(int argc, char *argv[])
{
char *Dir =".";
LOGICAL recurse = FALSE;
if (1 < argc)
Dir = argv[1];
if (2 < argc)
recurse = (NULL != strchr("Yy", *argv[2]));
do_dir(Dir, recurse);
printf("Counted: %d Directories and %d Files\n",
DirCount, FileCount);
}